package app

import (
	"fmt"
	"go-demo/common/global"
	"go-demo/config"
	"gopkg.in/yaml.v3"
	"log"
	"os"
)

type ReadConfig struct {
}

func (read ReadConfig) Load() {
	c := readConfig()
	global.App.Config = c // TODO 把这个实体类设为全局变量 程序中就都可以读到yaml中数据
}

var EnvConfig = config.EnvConfig{}
var currentDir, _ = os.Getwd() //项目路径

func readConfig() *config.Config {
	c := new(config.Config)

	// TODO 读取到yaml代表配置文件的字符串
	env := switchEvn()

	file := fmt.Sprintf("%s\\config\\application-%s.yaml", currentDir, env)
	evnBytes, err := os.ReadFile(file)
	if err != nil {
		log.Panic("读取配置文件失败")
	}

	// TODO 解析yaml文件 并把解析到的数据解析到实体类中
	err = yaml.Unmarshal(evnBytes, c)
	if err != nil {
		fmt.Println("解析 yaml 文件失败：", err)
		panic(err)
	}

	log.Printf("ymal文件映射成功，%v", c)
	return c
}

// SwitchEvn 读取环境 配置
func switchEvn() string {
	// TODO 环境配置路径
	currentDir, _ := os.Getwd()
	file := currentDir + "\\config\\application.yaml"

	// TODO 读取配置yaml文件，并把环境值赋给evnConfig
	dataBytes, err := os.ReadFile(file)
	if err != nil {
		log.Panic("==========>读取环境配置失败", err)
	}
	//读取application 里的profile环境配置 选择 local prod 等
	err = yaml.Unmarshal(dataBytes, &EnvConfig)

	fmt.Printf("==========>环境读取到%v\n", EnvConfig.Profile.Env)
	// TODO 返回解析到的yaml配置文件名
	return EnvConfig.Profile.Env
}
